let urlEnv = require("./src/config/env");
var path = require("path");
const CompressionWebpackPlugin = require("compression-webpack-plugin");
const webpack = require("webpack");

module.exports = {
  // 生成的生产环境构建文件的目录
  outputDir: "dist",
  //路径前缀
  publicPath: "/",
  assetsDir: "",
  css: {
    // 打包时禁用顺序检查 warning [mini-css-extract-plugin]
    extract:
      process.env.NODE_ENV === "production" || process.env.NODE_ENV === "pre"
        ? {
            ignoreOrder: true
          }
        : false,
    loaderOptions: {
      less: {
        lessOptions: {
          modifyVars: {
            "primary-color": "#4d65fd"
          },
          javascriptEnabled: true
        }
      }
    }
  },
  // webpack配置
  configureWebpack: config => {
    // 关闭 webpack 的性能提示
    {
      false;
    }
    if (
      process.env.NODE_ENV === "pre" ||
      process.env.NODE_ENV === "production"
    ) {
      // 生产和预发布环境js文件带上哈希值
      config.output.filename = `js/[name].[contenthash].js`;
      config.output.chunkFilename = `js/[name].[contenthash].js`;
    }
    // 对打包后文件进行压缩
    // if (process.env.NODE_ENV === 'production') {
    config.plugins.push(
      ...[
        new CompressionWebpackPlugin({
          filename: "[path].gz[query]",
          algorithm: "gzip",
          test: /\.(js|css|html|svg)$/i,
          threshold: 10240, //对超过10k的数据进行压缩
          minRatio: 0.8 // 压缩比例，值为0 ~ 1
        })
      ],
      new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/)
    );
  },
  chainWebpack: config => {
    config.resolve.alias
      .set("vue$", "vue/dist/vue.esm.js")
      .set("@", path.resolve(__dirname, "./src"))
      // .set("static", path.resolve(__dirname, "public/static"))
      .set(
        "@ant-design/icons/lib/dist$",
        path.resolve(__dirname, "src/icons/index.js")
      ); // 按需加载icon
    // 配置环境变量
    config.plugin("define").tap(args => {
      args[0]["process.env"].HOST_NAME = JSON.stringify(
        urlEnv.baseUrl.apiHostName
      );
      args[0]["process.env"].OSS = JSON.stringify(urlEnv.baseUrl.oss);
      return args;
    });
    // 修改title
    config.plugin("html").tap(args => {
      args[0].title = "众咖科技-聚点商城";
      return args;
    });
    // 展示图形化信息
    // config
    //   .plugin("webpack-bundle-analyzer")
    //   .use(require("webpack-bundle-analyzer").BundleAnalyzerPlugin);
  },
  // 是否在开发环境下通过 eslint-loader 在每次保存时 lint 代码。这个值会在 @vue/cli-plugin-eslint 被安装之后生效。
  lintOnSave: true,
  // 生产环境是否生成 sourceMap 文件
  productionSourceMap: false,
  // 所有 webpack-dev-server 的选项
  devServer: {
    // 端口
    port: 8080,
    // 请求代理
    proxy: {
      "/api": {
        target: urlEnv.baseUrl && urlEnv.baseUrl.apiHostName,
        ws: true,
        changeOrigin: true //可否跨域
        // pathRewrite: {
        //   '^/api': '' //重写接口，去掉/api
        // }
      }
    }
  }
};
